
class B {
    public:
        B() {}
        B(const B&) = delete;
        // 其他成员，不含有移动构造函数
};

class D : public B {
    // 没有声明任何构造函数
};

int main()
{
    /**
     * 1. 如果基类中的默认构造函数、拷贝构造函数、拷贝赋值运算符或析构函数是 delete 的或者
     *    不可访问的，则派生类中对应的成员将是 delete 的
     * 2. 如果基类中的析构函数是 delete 的或者不可访问的，则派生类中的合成的默认构造函数、
     *    拷贝构造函数、移动构造函数都是 delete 的
     */
    D d;                        // 正确：使用 B 的默认构造函数
    // D d2(d);                 // 错误：D 的合成拷贝构造函数是 delete 的
    // D d3(std::move(d));      // 错误：隐式地使用 D 的合成拷贝构造函数
}